using CodeSaude.Domain.Entities;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.ModelConfiguration;

namespace CodeSaude.Infrastructure.Data.EntityConfig
{
    public class pessoaMap : EntityTypeConfiguration<Pessoa>
    {
        public pessoaMap()
        {
            // Primary Key
            this.HasKey(t => t.PessoaId);

            // Properties
            this.Property(t => t.nome_pessoa)
                .IsRequired()
                .HasMaxLength(255);

            this.Property(t => t.sexo_pessoa)
                .IsFixedLength()
                .HasMaxLength(1);

            this.Property(t => t.nome_pai_pessoa)
                .HasMaxLength(255);

            this.Property(t => t.nome_mae_pessoa)
                .HasMaxLength(255);

            this.Property(t => t.naturalidade_pessoa)
                .HasMaxLength(255);

            this.Property(t => t.uf_naturalidade_pessoa)
                .IsFixedLength()
                .HasMaxLength(2);

            this.Property(t => t.numero_naturalizacao)
                .HasMaxLength(20);

            this.Property(t => t.frequenta_escola)
                .IsFixedLength()
                .HasMaxLength(1);

            this.Property(t => t.aposentado)
                .IsFixedLength()
                .HasMaxLength(1);

            this.Property(t => t.profissao)
                .HasMaxLength(255);

            this.Property(t => t.possui_ocupacao)
                .IsFixedLength()
                .HasMaxLength(1);

            this.Property(t => t.nome_cartorio)
                .HasMaxLength(50);

            this.Property(t => t.livro_certidao)
                .HasMaxLength(20);

            this.Property(t => t.folha_certidao)
                .HasMaxLength(20);

            this.Property(t => t.termo_certidao)
                .HasMaxLength(20);

            this.Property(t => t.email)
                .HasMaxLength(40);

            this.Property(t => t.celular)
                .HasMaxLength(20);

            this.Property(t => t.telefone_contato)
                .HasMaxLength(20);

            this.Property(t => t.nome_contato)
                .HasMaxLength(70);

            this.Property(t => t.rg_pessoa)
                .HasMaxLength(20);

            this.Property(t => t.uf_rg)
                .IsFixedLength()
                .HasMaxLength(2);

            this.Property(t => t.cpf_pessoa)
                .HasMaxLength(20);

            this.Property(t => t.ocupacao_pessoa)
                .HasMaxLength(255);

            this.Property(t => t.est_civil_pessoa)
                .HasMaxLength(60);

            this.Property(t => t.cep_pessoa)
                .HasMaxLength(10);

            this.Property(t => t.rua_pessoa)
                .HasMaxLength(255);

            this.Property(t => t.bairro_pessoa)
                .HasMaxLength(255);

            this.Property(t => t.cidade_pessoa)
                .HasMaxLength(255);

            this.Property(t => t.numero_pessoa)
                .HasMaxLength(10);

            this.Property(t => t.complemento_pessoa)
                .HasMaxLength(60);

            this.Property(t => t.uf_pessoa)
                .IsFixedLength()
                .HasMaxLength(2);

            this.Property(t => t.telefone_pessoa)
                .HasMaxLength(20);

            this.Property(t => t.outro_endereco_pessoa)
                .HasMaxLength(255);

            this.Property(t => t.ponto_ref_pessoa)
                .HasMaxLength(255);

            this.Property(t => t.cns_pessoa)
                .HasMaxLength(20);

            this.Property(t => t.Usuario_criacao)
                .HasMaxLength(50);

            this.Property(t => t.Usuario_alteracao)
                .HasMaxLength(50);

            this.Property(t => t.codigo_paciente_bioslab)
                .HasMaxLength(20);

            // Table & Column Mappings
            this.ToTable("pessoa");
            this.Property(t => t.PessoaId).HasColumnName("id_pessoa");
            this.Property(t => t.prontuario).HasColumnName("prontuario");
            this.Property(t => t.nome_pessoa).HasColumnName("nome_pessoa");
            this.Property(t => t.dt_nasc_pessoa).HasColumnName("dt_nasc_pessoa");
            this.Property(t => t.id_raca_cor).HasColumnName("id_raca_cor");
            this.Property(t => t.sexo_pessoa).HasColumnName("sexo_pessoa");
            this.Property(t => t.nome_pai_pessoa).HasColumnName("nome_pai_pessoa");
            this.Property(t => t.nome_mae_pessoa).HasColumnName("nome_mae_pessoa");
            this.Property(t => t.id_nacionalidade).HasColumnName("id_nacionalidade");
            this.Property(t => t.naturalidade_pessoa).HasColumnName("naturalidade_pessoa");
            this.Property(t => t.uf_naturalidade_pessoa).HasColumnName("uf_naturalidade_pessoa");
            this.Property(t => t.id_pais_origem).HasColumnName("id_pais_origem");
            this.Property(t => t.data_entrada).HasColumnName("data_entrada");
            this.Property(t => t.data_naturalizacao).HasColumnName("data_naturalizacao");
            this.Property(t => t.numero_naturalizacao).HasColumnName("numero_naturalizacao");
            this.Property(t => t.id_escolaridade).HasColumnName("id_escolaridade");
            this.Property(t => t.frequenta_escola).HasColumnName("frequenta_escola");
            this.Property(t => t.aposentado).HasColumnName("aposentado");
            this.Property(t => t.profissao).HasColumnName("profissao");
            this.Property(t => t.possui_ocupacao).HasColumnName("possui_ocupacao");
            this.Property(t => t.id_tipo_certidao).HasColumnName("id_tipo_certidao");
            this.Property(t => t.nome_cartorio).HasColumnName("nome_cartorio");
            this.Property(t => t.livro_certidao).HasColumnName("livro_certidao");
            this.Property(t => t.folha_certidao).HasColumnName("folha_certidao");
            this.Property(t => t.termo_certidao).HasColumnName("termo_certidao");
            this.Property(t => t.data_emissao_certidao).HasColumnName("data_emissao_certidao");
            this.Property(t => t.email).HasColumnName("email");
            this.Property(t => t.celular).HasColumnName("celular");
            this.Property(t => t.telefone_contato).HasColumnName("telefone_contato");
            this.Property(t => t.nome_contato).HasColumnName("nome_contato");
            this.Property(t => t.id_parentesco_contato).HasColumnName("id_parentesco_contato");
            this.Property(t => t.id_etnia).HasColumnName("id_etnia");
            this.Property(t => t.rg_pessoa).HasColumnName("rg_pessoa");
            this.Property(t => t.id_orgao_emissor).HasColumnName("id_orgao_emissor");
            this.Property(t => t.uf_rg).HasColumnName("uf_rg");
            this.Property(t => t.data_emissao_rg).HasColumnName("data_emissao_rg");
            this.Property(t => t.cpf_pessoa).HasColumnName("cpf_pessoa");
            this.Property(t => t.ocupacao_pessoa).HasColumnName("ocupacao_pessoa");
            this.Property(t => t.est_civil_pessoa).HasColumnName("est_civil_pessoa");
            this.Property(t => t.cep_pessoa).HasColumnName("cep_pessoa");
            this.Property(t => t.id_tipo_logradouro).HasColumnName("id_tipo_logradouro");
            this.Property(t => t.rua_pessoa).HasColumnName("rua_pessoa");
            this.Property(t => t.bairro_pessoa).HasColumnName("bairro_pessoa");
            this.Property(t => t.cidade_pessoa).HasColumnName("cidade_pessoa");
            this.Property(t => t.numero_pessoa).HasColumnName("numero_pessoa");
            this.Property(t => t.complemento_pessoa).HasColumnName("complemento_pessoa");
            this.Property(t => t.uf_pessoa).HasColumnName("uf_pessoa");
            this.Property(t => t.telefone_pessoa).HasColumnName("telefone_pessoa");
            this.Property(t => t.outro_endereco_pessoa).HasColumnName("outro_endereco_pessoa");
            this.Property(t => t.ponto_ref_pessoa).HasColumnName("ponto_ref_pessoa");
            this.Property(t => t.cns_pessoa).HasColumnName("cns_pessoa");
            this.Property(t => t.flagSyncSGE).HasColumnName("flagSyncSGE");
            this.Property(t => t.id_situacao).HasColumnName("id_situacao");
            this.Property(t => t.data_criacao).HasColumnName("data_criacao");
            this.Property(t => t.Usuario_criacao).HasColumnName("Usuario_criacao");
            this.Property(t => t.data_alteracao).HasColumnName("data_alteracao");
            this.Property(t => t.Usuario_alteracao).HasColumnName("Usuario_alteracao");
            this.Property(t => t.codigo_paciente_bioslab).HasColumnName("codigo_paciente_bioslab");
        }
    }
}
